package gf

import (
	"os"
)

// GetText 读取文件内容并存储到ApiReadScreen实例中。
// 该方法读取FileName指定的文件内容，将其转换为字符串并赋值给Text字段。
// 如果文件读取过程中发生错误，Err字段将被设置为相应的错误信息。
// 返回值始终为rs本身，以便进行错误检查或链式调用。
func (rs *ReadScreen) GetText() *ReadScreen {
	// 初始化临时字节切片以存储文件内容。
	var tmp []byte
	// 重置错误状态，确保之前的错误不会影响当前操作。
	rs.Err = nil
	// 尝试读取文件内容到临时变量中，并检查是否有错误发生。
	tmp, rs.Err = os.ReadFile(rs.FileName)
	if rs.Err != nil {
		// 如果发生错误，直接返回rs，Err字段已设置为相应的错误信息。
		return rs
	}
	// 将读取到的字节切片转换为字符串并赋值给Text字段。
	rs.Text = string(tmp)
	// 保存原始文本内容，以供后续比较或使用。
	rs.textOld = rs.Text
	// 返回rs，此时Text字段已设置为文件内容，Err字段为nil。
	return rs
}

// Line 读取指定行,首行: 1
func (rs *ReadScreen) Line(line int) *ReadScreen {
	rs.han.Text = rs.Text
	rs.han.Line(line)
	rs.Text = rs.han.Text
	rs.Err = rs.han.Err
	rs.Slice = rs.han.Slice
	return rs
}

// LineRange 读取指定范围行, 首行: 1
func (rs *ReadScreen) LineRange(start, end int) *ReadScreen {
	rs.han.Text = rs.Text
	rs.han.LineRange(start, end)
	rs.Text = rs.han.Text
	rs.Err = rs.han.Err
	rs.Slice = rs.han.Slice
	return rs
}

// Column 读取指定列, 首列: 1
func (rs *ReadScreen) Column(col int, sep string) *ReadScreen {
	rs.han.Text = rs.Text
	rs.han.Column(col, sep)
	rs.Text = rs.han.Text
	rs.Err = rs.han.Err
	rs.Slice = rs.han.Slice
	return rs
}

// ColumnRange 读取指定范围列, 首列: 1
func (rs *ReadScreen) ColumnRange(start, end int, sep string) *ReadScreen {
	rs.han.Text = rs.Text
	rs.han.ColumnRange(start, end, sep)
	rs.Text = rs.han.Text
	rs.Err = rs.han.Err
	rs.Slice = rs.han.Slice
	return rs
}

// Reset 重置 ReadScreen 实例的文本状态
// 该方法将 Text 和 han.Text 字段恢复到 textOld 的状态
// 主要用于在需要时将屏幕读取 API 的文本显示重置到初始或先前保存的状态
// 返回值是重置后的 *ReadScreen 实例，允许进行链式调用或进一步操作
func (rs *ReadScreen) Reset() *ReadScreen {
	rs.han.Text = rs.textOld
	rs.Text = rs.textOld
	return rs
}
